package com.jt.common.util;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * Cookie工具类
 * @author BennyTian
 * @date 2015年4月22日 下午5:26:16
 */
public class CookieUtil {
	
	protected static Logger logger = LoggerFactory.getLogger(CookieUtil.class);
	
	/**
	 * 设置Cookie
	 * @author BennyTian
	 * @date 2015年4月22日 下午5:22:04
	 * @param request
	 * @param name
	 * @param value
	 */
	public static void setCookie(HttpServletResponse response, String name,String value){
		setCookie(response, name, value, -1);
	}
	
	/**
	 * 设置Cookie
	 * @author BennyTian
	 * @date 2015年4月22日 下午5:22:10
	 * @param request
	 * @param name
	 * @param value
	 * @param expiry
	 */
	public static void setCookie(HttpServletResponse response, String name,String value, Integer expiry){
		setCookie(response, name, value, "/", null, expiry);
	}
	
	/**
	 * 设置一个Cookie
	 * @author BennyTian
	 * @date 2015年4月22日 下午5:14:49
	 * @param request
	 * @param name		名
	 * @param value		值
	 * @param path		路径
	 * @param domain	域名
	 * @param expiry	有效期（秒）
	 */
	public static void setCookie(HttpServletResponse response, String name,String value,String path,String domain,Integer expiry){
		if(response == null || name == null || value == null){
			throw new IllegalArgumentException("params error.");
		}
		Cookie cookie = new Cookie(name, value);
		if(domain != null){
			cookie.setDomain(domain);
		}
		if(path != null){
			cookie.setPath(path);
		}else{
			cookie.setPath("/");
		}
		if(expiry !=null ){
			cookie.setMaxAge(expiry);
		}else{
			cookie.setMaxAge(-1);
		}
		response.addCookie(cookie);
		logger.info("setCookie:[name="+name+",value="+value+",path="+path+",domain="+domain+",expiry="+expiry+"]");
	}
	
	/**
	 * 获取一个Cookie
	 * @author BennyTian
	 * @date 2015年4月22日 下午5:12:24
	 * @param request
	 * @param name
	 * @return
	 */
	public static Cookie getCookie(HttpServletRequest request, String name) {
		logger.info("getCooie:" +name);
		if(name == null){
			throw new IllegalArgumentException("params error.");
		}
		Cookie cookies[] = request.getCookies();
		if (cookies == null || cookies.length==0) {
			return null;
		}
		Cookie cookie = null;
		for (int i = 0; i < cookies.length; i++) {
			if (cookies[i].getName().equals(name)) {
				cookie = cookies[i];
				return cookie;
			}
		}
		return null;
	}
	
	/**
	 * 删除Cookie
	 * @author BennyTian
	 * @date 2015年4月22日 下午5:23:17
	 * @param request
	 * @param response
	 * @param name
	 */
	public static void deleteCookie(HttpServletRequest request,HttpServletResponse response,String name) {
		deleteCookie(request, response, name, null, null);
	}
	
	/**
	 * 删除Cookie
	 * @author BennyTian
	 * @date 2015年4月22日 下午8:10:52
	 * @param request
	 * @param response
	 * @param name
	 * @param domain
	 * @param path
	 */
	public static void deleteCookie(HttpServletRequest request,HttpServletResponse response,String name,String domain,String path) {
		Cookie cookie = getCookie(request, name);
		if(cookie != null){
			cookie.setMaxAge(0);
			cookie.setValue(null);
			if(path != null){
				cookie.setPath(path);
			}else{
				cookie.setPath("/");
			}
			if(domain != null){
				cookie.setDomain(domain);
			}
			response.addCookie(cookie);
		}
		logger.info("deleteCookie:" + name +" , " + cookie);
	}
}
